#include <iostream>
#include <memory>
using namespace std;

class A
{
    public:
    char *p;
    ~A()
    {
        cout<<"A类的析构函数"<<endl;
        delete p;
    }
};

int main()
{
    // 创建一个auto_ptr智能指针，指向动态分配的A类对象
    // auto_ptr是C++98引入的智能指针，会自动管理所指向对象的生命周期
    auto_ptr<A> p1(new A);
    
    // 通过智能指针访问A类对象的成员p，并为其动态分配一个char类型的内存
    p1->p = new char;
    
    // 向动态分配的内存中存储字符'a'
    *(p1->p) = 'a';
    
    // 输出存储在动态内存中的字符
    cout << *(p1->p) << endl;
    
    // 程序结束时，main函数退出
    // 此时p1超出作用域，会自动调用其析构函数
    // p1的析构函数会自动删除所指向的A类对象
    // 而A类对象的析构函数会删除p指向的动态内存
    // 这样就完成了所有动态内存的自动释放，避免了内存泄漏
    return 0;
}